home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / util / wb / VisualPrefs_PT.lha / VisualPrefs_PT / VP-Developer_PT.doc < prev    next >
Text File  |  2001-04-19  |  7KB  |  154 lines

  1.  
  2.                                Apresentando
  3.  
  4.                O INTERFACE DO VISUALPREFS PARA PROGRAMADORES
  5.  
  6.                             Um trabalho em curso
  7.  
  8.  
  9. Se é um programador, pode aproveitar algumas das características do VisualPrefs.
  10.  
  11. Embora não exista ainda um API completo para o VisualPrefs, já é possível
  12. utilizar as classes BOOPSI que o VisualPrefs adiciona ao sistema.
  13.  
  14. O objectivo dessas classes é permitir ao programador obter facilmente um
  15. "visual" à VisualPrefs sem ter que esperar que eu implemente um 'patch'
  16. para a sua aplicação.  ;-)
  17.  
  18. Actualmente existe apenas uma classe:
  19.  
  20. "tbiclass" - a classe da barra de título
  21.  
  22. Esta classe proporciona na barra de título das suas janelas as imagens
  23. mais comuns dos botões criados pelas aplicações.  Exemplos disto são o botão
  24. de iconificação ou o botão "padlock" do DirOpus5.
  25.  
  26. Todos os programas que usem esta classe obterão o mesmo aspecto para os botões
  27. da barra de título se o VisualPrefs estiver a correr, o que provavelmente é
  28. melhor do que ter diversas versões da mesma imagem...
  29.  
  30. Pode usar a "tbiclass" como "sysiclass"; são ambas sub-classes da "imageclass".
  31. Uma imagem para a "tbiclass" pode ser criada chamando a função NewObject() com
  32. os seguintes parâmetros:
  33.  
  34. SYSIA_DrawInfo - Isto é absolutamente obrigatório.  TEM que passar um ponteiro
  35.                  DrawInfo para a "tbiclass" ou a função NewObject() falhará.
  36.  
  37. SYSIA_Which - Para especificar a imagem que pretende; actualmente existem seis
  38.               tipos de imagem:
  39.  
  40.               POPUPIMAGE    - Imagem do botão 'pop-up' do MUI na barra de título.
  41.               MUIIMAGE      - Imagem do botão de configuração do MUI na barra de título.
  42.               SNAPSHOTIMAGE - Imagem do botão do MUI na barra de título que permite
  43.                               gravar a posição da janela.
  44.               ICONIFYIMAGE  - Imagem de botão de iconificação na barra de título.
  45.               PADLOCKIMAGE  - Imagem do tipo de botão "padlock" do DirOpus.
  46.               TBFRAMEIMAGE  - Uma imagem de botão de barra de título vazia para
  47.                               efeitos gerais.
  48.  
  49. IA_Width, IA_Height - Estes só são reconhecidos pelo tipo TBFRAMEIMAGE;
  50.                       os restantes tipos de imagem ignoram-nos e têm sempre
  51.                       o mesmo tamanho da imagem do botão de troca de janelas.
  52.  
  53. SYSIA_ReferenceFont - Este só é reconhecido pelo tipo TBFRAMEIMAGE;
  54.                       os restantes tipos de imagem ignoram-no e tem sempre
  55.                       a mesma altura da imagem do botão de troca de janelas.
  56.  
  57. TBIA_FullFrame - Este parâmetro, disponível a partir do VisualPrefs 41.38, só
  58.                  é reconhecido pelo tipo TBFRAMEIMAGE.  Tem duas definições:
  59.                  TRUE e FALSE.  Use TRUE para dar à imagem uma moldura interior,
  60.                  caso o estilo actual suporte molduras interiores.  É aconselhável
  61.                  usar esta definição quando o conteúdo da imagem é gráfico.  Use
  62.                  FALSE para dar à imagem uma moldura exterior, o que é recomendável
  63.                  se a imagem contiver texto (já que que uma moldura interior
  64.                  poderia criar um espaço demasiado pequeno para esse texto).  A
  65.                  definição normal é FALSE.
  66.  
  67. A função GetAttr() também suporta o seguinte parâmetro:
  68.  
  69. TBIA_ContentsBox - Com este parâmetro, disponível a partir do VisualPrefs 41.35,
  70.                    pode obter de uma imagem os dados sobre a posição e tamanho da
  71.                    respectiva "caixa de conteúdo".  Esta caixa designa a zona onde,
  72.                    se for necessário, é possível adicionar novos componentes
  73.                    gráficos.  Em princípio só é preciso usar este parâmetro com
  74.                    imagens TBFRAMEIMAGE.  Para posicionar a caixa correctamente,
  75.                    adicione os valores de deslocamento à esquerda e ao cimo aos da
  76.                    própria imagem.  De notar que, para obter melhores resultados, é
  77.                    vivamente recomendável não seguir à risca as dimensões devolvidas
  78.                    pelo parâmetro - deixe sempre um pequeno espaço (cerca de dois
  79.                    píxeis) em redor dos gráficos da imagem.
  80.                    A função só pode ser lida.  O valor atribuído a este parâmetro
  81.                    tem que ser um ponteiro para uma estrutura IBox.  NUNCA lhe atribua
  82.                    um ponteiro 'longword'!
  83.  
  84. Claro que se a função NewObject() falhar, deve providenciar uma imagem pré-definida
  85. para os botões da sua barra de título.  No entanto, editei uma versão Freeware de
  86. imagens para a "tbiclass" (dev/gui/titlebar_ic.lha) que poderá incluir nas suas
  87. aplicações.  Esta classe providenciará as imagens necessárias que serão
  88. automaticamente substituídas pelas do VisualPrefs se este estiver presente.
  89. Por isso pode manter as suas imagens pré-definidas muito simples ;-)
  90.  
  91. Se usar o tipo TBFRAMEIMAGE para criar as suas próprias imagems para barras de
  92. título, há duas formas de adicionar mais gráficos a cada imagem: ou introduz o
  93. endereço dos seus gráficos no campo NextImage, ou divide a "tbiclass" em sub-classes
  94. e redefine os métodos IM_DRAW/IM_DRAWFRAME (como é óbvio, neste caso é indispensável
  95. deixar que a classe principal seja a primeira a desenhar os gráficos!).
  96.  
  97. É importante tomar nota de que todas as imagens da "tbiclasss" terão um valor
  98. de -1 no lado esquerdo.  Isto não deve ser modificado e deve colocar os seus
  99. botões da barra de título em concordância.  A razão para este (aparentemente
  100. estranho) comportamento é que as imagens dos botões da barra de título do sistema
  101. Intuition também funcionam deste modo e devemos tentar manter a compatibilidade
  102. sempre que for possível.
  103.  
  104. Assim, ajuste o tamanho dos seus botões, se necessário, para os adaptar ao tamanho
  105. das imagens devolvido pela classe.
  106.  
  107. Um exemplo de tudo isto pode ser:
  108.  
  109.    ...
  110.  
  111.    /* Criar a imagem */
  112.  
  113.    if (!(iconifyimage = NewObject(NULL,"tbiclass",SYSIA_Which,ICONIFYIMAGE,
  114.                                                   SYSIA_DrawInfo,dri,
  115.                                                   TAG_END)))
  116.    {
  117.       iconifyimage = builtin_iconifyimage;
  118.    }
  119.  
  120.    /* Utilizar a imagem */
  121.  
  122.    gad->GadgetRender = iconifyimage;
  123.    ...
  124.  
  125.    /* Libertar a imagem */
  126.  
  127.    if (iconifyimage != builtin_iconifyimage) DisposeObject(iconifyimage);
  128.  
  129.    ...
  130.  
  131. É tudo.  Por agora não tenho um verdadeiro ficheiro de exemplo, por isso,
  132. para utilizar a "tbiclass" nas suas aplicações, por favor cole as poucas
  133. linhas seguintes no início do seu código.
  134.  
  135. ---- cortar por aqui ----8<---- cortar por aqui ----8<---- cortar por aqui ----
  136.  
  137. #define POPUPIMAGE    (101)
  138. #define MUIIMAGE      (102)
  139. #define SNAPSHOTIMAGE (103)
  140. #define ICONIFYIMAGE  (104)
  141. #define PADLOCKIMAGE  (105)
  142. #define TBFRAMEIMAGE  (106)
  143.  
  144. ---- cortar por aqui ----8<---- cortar por aqui ----8<---- cortar por aqui ----
  145.  
  146. Existe já uma aplicação a usar a "tbiclass", o ViNCEd de Thomas Richter.
  147.  
  148. Espero que também suporte a "tbiclass" e contribua deste modo para dar uma
  149. aparência consistente a todos os botões das barras de título usados nas
  150. aplicações.
  151.  
  152. Obrigado,
  153.                                       Massimo Tantignone (tanti@intercom.it)
  154.